# aggregate.py

# TODO(Copilot): 实现 aggregate_signatures(signatures)
# - 输入: 签名列表
# - 输出: 聚合签名 (bytes)

# TODO(Copilot): 实现 verify_aggregate(pks, messages, agg_sig)
# - 输入: 公钥集合, 消息集合, 聚合签名
# - 输出: True/False
"""聚合签名的简单实现（示例/教学用）。

注意：本实现为教学用途的轻量级模拟。真实协议请使用成熟的密码库与协议实现。
"""
import hashlib
from typing import List, Optional


def aggregate_signatures(signatures: List[bytes]) -> bytes:
	"""把一组签名字节聚合成单个摘要（示例实现：把签名连接后做哈希）。

	输入: signatures - bytes 列表
	输出: 聚合签名 bytes
	"""
	if not signatures:
		return b""
	m = hashlib.sha256()
	for s in signatures:
		m.update(s)
	return m.digest()


def verify_aggregate(pks: List[bytes], messages: List[bytes], agg_sig: bytes, signatures: Optional[List[bytes]] = None) -> bool:
	"""验证聚合签名（示例实现）：如果提供原始签名列表，则用与聚合一致的方式重建并比较；
	否则无法在此轻量模拟中单独验证聚合签名。
	"""
	if signatures is None:
		# 在这个简单的模拟中，如果没有 individual signatures，就无法验证聚合签名
		return False
	recomputed = aggregate_signatures(signatures)
	return recomputed == agg_sig

